package com.longge;

public class LongestNiceSubstring {

    /**
     * 1、什么时候应该移动 right 扩⼤窗⼝？窗⼝加⼊字符时，应该更新哪些数据？
     * 2、什么时候窗⼝应该暂停扩⼤，开始移动 left 缩⼩窗⼝？从窗⼝移出字符时，应该更新哪些数据？
     * 3、我们要的结果应该在扩⼤窗⼝时还是缩⼩窗⼝时进⾏更新？
     *
     * @param s
     * @return
     */
    public String longestNiceSubstring(String s) {

        int max = -1, start = 0, end = 0;
        char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            for (int j = i+1; j < chars.length; j++) {
                if (checkGoodStr(chars, i, j) && max < j - i) {
                    max = j - i;
                    start = i;
                    end = j;
                }
            }
        }
        return max == -1 ? "" : new String(chars, start, end - start + 1);
    }

    private boolean checkGoodStr(char[] chars, int i, int j) {

        String s = new String(chars,i,j-i+1);
        for (int h = 0; h < s.length(); h++) {
            if (!s.contains(String.valueOf(Character.toLowerCase(s.charAt(h)))) || !s.contains(String.valueOf(Character.toUpperCase(s.charAt(h))))) {
                return false;
            }
        }
        return true;
    }

    public static void main(String[] args) {
        new LongestNiceSubstring().longestNiceSubstring("zaAa");
    }

}
